I'm not sure that matrix is unitarily diagonalizable without extra assumptions on the values that appear. Using Inverse instead of ConjugateTranspose we can do
Block[{Y = ({ {a, b, 0, 0}, {a, b, 0, 0}, {0, 0, c, d}, {0, 0, a, d} }), values, vectors, X }, {values, vectors} = Eigensystem[Y]; X = Transpose[vectors]; Inverse[X] . Y . X // FullSimplify ]
Which provides the diagonal matrix $D$:
$$\left( \begin{array}{cccc} 0 & 0 & 0 & 0 \\ 0 & a+b & 0 & 0 \\ 0 & 0 & \frac{1}{2} \left(-\sqrt{4 a d+(c-d)^2}+c+d\right) & 0 \\ 0 & 0 & 0 & \frac{1}{2} \left(\sqrt{4 a d+(c-d)^2}+c+d\right) \\ \end{array} \right)$$
with $X$ given by:
$$\left( \begin{array}{cccc} -\frac{b}{a} & 1 & 0 & 0 \\ 1 & 1 & 0 & 0 \\ 0 & 0 & -\frac{\sqrt{4 a d+(c-d)^2}-c+d}{2 a} & \frac{\sqrt{4 a d+(c-d)^2}+c-d}{2 a} \\ 0 & 0 & 1 & 1 \\ \end{array} \right)$$
Edit: You can also use JordanDecomposition:
Block[ {Y = { {a, b, 0, 0}, {a, b, 0, 0}, {0, 0, c, d}, {0, 0, a, d}}, X, D }, {X, D} = JordanDecomposition[Y]; MatrixForm /@ {X, D} ]
(Warning, don't actually call a symbol D.)