Currently when a config is saved after a calculation, Gson is configured to serializeSpecialFloatingPointValues, which does not conform to the JSON spec (although GSON accepts NaN when deserializing). We should favor conformance, but provide vehicle for translating null (permitted by JSON) to NaN. When parsing a command-line string or csv, we'll allow either value.
CalcConfig.SiteDefaults has been reconfigured to store basin terms as NaN, but its Builder uses Double and converts null values to NaN on build(). Serialization of a config converts NaN back to null.
Edge case: Gson accepts NaN automatically; so in the edge case where one wants to explicitly override an existing config.siteDefaults value (with an independently supplied config) or set individual sites to the default basin model in a batch job, one should use NaN (unquoted). In practice, when varying basin terms, one should set the siteDefaults to the default (NaN) basin models and override any or all sites with specific basin terms.
An alternative would be to use negative numbers to flag whether to use the default basin model provided by GMM authors. Favoring the mix of null/NaN for now. Updating wiki with explanation.