While the answer from Anixx is good for dual number and some basic operations from Quaternions package, you may need to implement the Norm[] and Normalize[] if you want to work with unit dual quaternion. The block code below is my implementation for both functions (developed from Anixx answer and ashen answer in here):
Needs["Quaternions`"]
DQ={(#/.de->0)+de(D[#, de]/.de->0)}&;
a = DQ[Quaternion[0.1,0.2,0.3,0.4]+de Quaternion[0.5,0.6,0.7,0.8]]
MyNorm= Norm[#] /. de -> 0 &;
InternalDotDQ=(List @@(# /. de->0)[[1]]).(List @@ Coefficient[#,de][[1]]) &;
MyNormalize=(# /. de->0)/ MyNorm[#] + de (Coefficient[#,de] / MyNorm[#] - (# /. de->0) * ((List @@ (# /. de->0)[[1]]).(List @@ Coefficient[#,de][[1]]))/ (MyNorm[#] ^3))&;
b = MyNormalize[a]
InternalDotDQ[b]
MyNorm[b]
Note that unit dual quaternion require the internal dot product = 0 and the new norm = 1, List @@
is Apply List (I need this to perform dot product), (# /. de->0)[[1]]
will return the real part, and Coefficient[#,de][[1]]
returns the dual part.