Regarding the crash in Extract, MSDN has this to say: Beginning with the .NET Framework version 4, the Assembly Cache Viewer (Shfusion.dll) [the implementation that crashed when passing NULL] is obsolete and has been removed.
As for the non-crashing case, I wouldn't bother with working around the bug. If someone doesn't implement the contract correctly then simply don't show the icon. But if you hide bugs they will never get fixed.
And if you want to properly guard against crashing extensions, you have to extract your icons in a helper process anyway. If the crash report dialogues get too painful, you can use SEH to terminate the process nicely on the second and subsequent crash. But always let the helper crash at least once, otherwise no one will know that something went wrong and hence no one can fix it. At least when you crash Microsoft can notify the developer or create a shim.
If the problem doesn't get fixed within a reasonable time frame and customers complain, I would probably unregister the crashing extension or even shim, but I'm not going to change my Extract call if it follows the contract. The only way to detect bugs is to break when they occur; it may be more painful in the short term but if you don't follow this principle bugs can linger for decades, inconveniencing many more people.