all imports seem to geo code
The answer is bug, but not for the reasons I thought.

In short: the addition of MagicMerge seems to be the culprit, resulting in changed behavior when geocodeMethod is set to NULL.

Long answer:

First, setting the property of a singleton in one function, does result in it persisting even in other functions. The singleton really does act like a global variable. That's how this has worked all the way up to 4.7.

However, in 4.7 MagicMerge was introduced to streamline the configuration object.

This approach added __get and __set functions to handle properties that are not defined.

Now, if a property (like geocodeMethod) is set, it is added to the cache ($this-&gt;cache[$name] = $v;). So far so good.

However, when it is retrieved, it only comes from the cache if it is set:

if (isset($this-&gt;cache[$k])) {
  return $this-&gt;cache[$k];
}


Oops. If we set it to NULL it will never be retrieved from the cache and will always be retrieved using the function CRM_Utils_Geocode::getProviderClass