ToString() would certainly return the values but you can't SUM() a string. So I would still have to do an additional conversion to get the money or smallmoney values back.
So is it worth my time to write a CLR UDT?
I've also thought about an XML String for the "extraneous" values, but then I'd have to shred the string constantly for all the reports that would be based off this DW. I can't seem to come up with one good solution to this problem.