Empty definitions are not allocated on a heap, so doing a g_free() on it would crash anyway.
The size of icons is a property that is relevant to who is rendering the icon, not to the icon itself. Example: Starting a DND operation from an entry icon should cause the icon to resize (from the entr icon's size to the DND icon size).
The image definition is supposed to hold the description about the image to be displayed. The icon helper actually does caching and tracks changes.