The reason that it fails is that the output code instantiates the default implementation even if you override it. The problem is that there is no symbol defined for 10^-4.
Ah, that explains why it works for millimeter. Multiplying two millimeter units together gives 10^-6, which has a symbol. Does this mean that the IO can't handle units that have base units raised to some power that does not correspond to a symbol, or is this just supposed to be done a different way? Looking at the libraries definition of farad (which contains seconds to the fourth power), a derived dimension is defined for capacitance, and then an a unit for that dimension is created. Should I be creating the centimeter squared unit from the area dimension directly instead of trying to build it from already defined units? Thanks you for the help. cdclark