My understanding of defule and friends is poor, but I think something
like the following would be better than yet another flag:
(%i1) matchdeclare(x, true);
(%o1) done
(%i2) defrule(lambert_crunch, exp(-lambert_w(x)), lambert_w(x) / x);
(%o2) lambert_crunch:%e^(-lambert_w(x))->lambert_w(x)/x
(%i3) diff(lambert_w(x),x);
(%o3) %e^(-lambert_w(x))/(lambert_w(x)+1)
(%i4) apply1(diff(lambert_w(x),x), lambert_crunch);
(%o4) lambert_w(x)/(x*(lambert_w(x)+1))
(%i5) apply1(diff(lambert_w(x^2),x), lambert_crunch);
(%o5) (2*lambert_w(x^2))/(x*(lambert_w(x^2)+1))
Put the rule in your maxima.init file if you often need it.
Taylor will not work on lambert_w for expansions about zero
if you change the gradef to the spurious pole form. I think
there is no easy way around that.
I changed the gradef for lambert_w after reading
http://www.cs.uwaterloo.ca/research/tr/1993/03/W.pdf
look at pages 11 and 12.
Barton