"Effective C++" Meyers mentions a
reason for a pure virtual function to
have a body: Derived classes that
implement this pure virtual function
may call this implementation smwhere
in their code. If part of the code of
two different derived classes is
similar then it makes sense to move it
up in the hierarchy, even if the
function should be pure virtual.
see here.