code: @Override
      public Object put(String key, Object value) {
          DeserializationState deserializationState = _deserState.get();
          if (deserializationState.isDeserialized()) {
              return deserializationState.deserialized.put(key, value);
          }
          return deserializationState.overrides.put(key, value);
      }
docs: For efficiency this method breaks the contract that the old value is returned.  Otherwise common operations such
  as adding intrinsics and template attributes would require deserializing the object.