I agree with the fact that the code path underlying is_classifier is messy and bad-design. However, right now I believe that it is better to use is_classifier rather than calling is_instance. That way the code path for testing if an estimator is a classifier is the same everywhere.

In the long run, I have the impression that registering a 'virtual subclass' of an ABCMeta class might be a way to explore:
http://docs.python.org/2/library/abc.html