Function detection, mentioned in the previous answer, does not work in Opera 12 - because it requires support for setDragImage, it just does not work. The Dart libraries that were linked also do not fully work in Opera 12, throwing a few errors to the console.
It is actually impossible to polyfill a ghost image - even if you create a document element and place it in the right place, you cannot get rid of the standard one without setDragImage.
The only solution I know of is to filter out Opera 12 and all versions of IE (up to IE11 and including IE11) and treat them as legacy browsers that should be served by traditional mouse event scripts. Since direct function testing fails, I would recommend an indirect object test (for example, use the object test to detect these specific browsers):
var hasNativeDraggable = (element.draggable && !(document.uniqueID || window.opera));
brothercake
source share