J has a similar feature: when applied to an empty array, /+ returns 0 and /* returns 1.<p>J doesn't have user-defined types. In a language with user-defined types, you would probably have to declare which operations are monoids.
I would concur with npryce. I your structure would adhere to the monoid interface and the default value could be cast automatically to the corresponding identity this will work. It wouldn't even break mathematics