adPower[0, x_LieSeries][ψ_LieSeries] := adPower[0,x][ψ] = Module[{ser},
ser=Unique[adPower];
ser[] = Hold[adPower[0,x][ψ]];
ser[d_Integer] := ser[d] = ψ[d];
LieSeries[ser]
];
adPower[n_Integer, x_LieSeries][ψ_LieSeries] := adPower[n,x][ψ] = Module[{ser},
ser=Unique[adPower];
ser[] = Hold[adPower[n,x][ψ]];
ser[d_Integer] := ser[d] =  b[x,adPower[n-1, x][ψ]][d];
LieSeries[ser]
];
adSeries[f_, x_LieSeries][ψ_LieSeries] := adSeries[f, x][ψ] = Module[{ser},
ser=Unique[adSeries];
ser[] = Hold[adSeries[f,x][ψ]];
ser[d_Integer] := ser[d] = Module[{c},
Expand[Sum[
c=SeriesCoefficient[f,{ad, 0, k}];
If[c === 0, 0, c*adPower[k, x][ψ][d]],
{k,0,d-1}
]]
];
LieSeries[ser]
];
adSeries[f_, x_][ψ_] := adSeries[f, MakeLieSeries[x]][MakeLieSeries[ψ]];
Ad[x_] := adSeries[E^ad, x];

?Me
?New
?Object

({{adSeries[f_, x_LieSeries][ψ_LieSeries] := adSeries[f, x][ψ] =New[
LieSeries[ser],
ser[d_Integer] := ser[d] = Module[{c},
Expand[Sum[
c=SeriesCoefficient[f,{ad, 0, k}];
If[c === 0, 0, c*adPower[k, x][ψ][d]],
{k,0,d-1}
]]
]
], adSeries[f_, x_LieSeries][ψ_LieSeries] := adSeries[f, x][ψ] = Module[{ser},
ser=Unique[adSeries];
ser[] = Hold[adSeries[f,x][ψ]];
ser[d_Integer] := ser[d] = Module[{c},
Expand[Sum[
c=SeriesCoefficient[f,{ad, 0, k}];
If[c === 0, 0, c*adPower[k, x][ψ][d]],
{k,0,d-1}
]]
];
LieSeries[ser]
];}})

SetAttributes[New, HoldAll];
New[type_[srn_], def_] := Module[   (* "srn" for "self-reference name" *)
{un}, (* "un" for "unique name" *)
un=Unique[ToString[type]<>"$"];
ReleaseHold[Hold[def] /. srn -> un];
type[un]
]

New[
LieSeries[ser],
ser[d_Integer] := ser[d] = Module[{c},
Expand[Sum[
c=SeriesCoefficient[f,{ad, 0, k}];
If[c === 0, 0, c*adPower[k, x][ψ][d]],
{k,0,d-1}
]]
]
]

?LieSeries$3