See the question and my original answer on StackOverflow

If you look at TypeDescriptor.GetProvider implementation using a tool such as .NET Reflector, you will see that the returned type is pretty hardcoded. It always returns a TypeDescriptionNode, like you observed. Same story for GetTypeDescriptor.

Now, what you could do is use Reflection mechanisms to get the actual TypeDescriptionProvider from TypeDescriptionNode. It's pretty easy, just get the private field named Provider, this is where the TypeDescriptionNode stores the actual implementation. Of course it's not supported, but I don't think this will change in a near future, and I don't really see a better way...