It seems that every time dynamic is used by the caller of a generic method, the type actually used is a simple object. For example, the code:
No, you cannot. Dynamic is all in the eye of the beholder (meaning: the compiler). It is implemented as dynamic. You can, however, check for IDynamicMetaObjectProvider: if an object implements that, the caller is probably talking about dynamic. Unfortunately, reflection also works inside dynamic, but will not involve IDynamicMetaObjectProvider at all.