Is thunking now built natively into .NET by emitting IL code? If so, at what version of .NET did this become natively supported?
No IL in involved in the thunk, it happens by emitting native code -- a trampoline that rearranges arguments to meet .NET's calling convention, including the this
pointer which is saved in case of closed delegates, and then performs a tail call to the .NET method itself.
Is implicit "thunking" supported in Mono as well?
This is called "reverse p/invoke", that should make it easy to look for in the Mono docs.
When the IL is emitted for the managed callbacks, what happens when the instance the thunk refers to is deleted?
When the delegate is garbage collected, memory used by the trampoline is also freed. So you need to keep the delegate alive as long as the native code has a pointer to the trampoline.