Hi,
There are two potential problems you may want to address in your definition.
1) To avoid repeated indices, we use Module constructions on the rhs of the definitions, with the list of dummy indices:
<< xAct`xTensor`
$PrePrint = ScreenDollarIndices;
DefManifold[M, 4, {a, b, c, d, e}]
it /: PD[-a_]@it[-b_, c_] := Module[{d, e}, -it[-b, d] PD[-a]@t[-d, e] it[-e, c]]
Then even repeating the indices will be OK, because they will be changed by dollar-indices and be renamed in output:
In[12]:= PD[-d][it[-b, e]]
Out[12]= - it[-b, a] it[-c, e] PD[-d][t[-a, c]]
2) The second question is that you may want to protect your inputs so that the definitions only work for the required characters (covariant or contravariant). For example the previous definition will fire for PD[-d][it[-b, -c]], but we don't want it, because there is no metric. We typically use _Symbol indices to ensure only true symbols are accepted in general patterns like c_. It would then be:
it /: PD[-a_]@it[-b_, c_Symbol] := Module[{d, e}, -it[-b, d] PD[-a]@t[-d, e] it[-e, c]]
You can also use -a_Symbol and -b_Symbol for consistency, but the truth is that the - sign already takes care of that point.
Cheers,
Jose.