code: function (obj, overrides, mutate) {
          var resolutionQueue = [], // we use this to store the queue of variable hierarchy
  
              // this is an intermediate object to stimulate a property (makes the do-while loop easier)
              variableSource = {
                  variables: this,
                  __parent: this.__parent
              };
  
          do { // iterate and accumulate as long as you find `.variables` in parent tree
              variableSource.variables && resolutionQueue.push(variableSource.variables);
              variableSource = variableSource.__parent;
          } while (variableSource);
  
          variableSource = null; // cautious cleanup
  
          return Property.replaceSubstitutionsIn(obj, _.union(resolutionQueue, overrides), mutate);
      }
docs: Recursively replace strings in an object with instances of variables. Note that it clones the original object. If
  the `mutate` param is set to true, then it replaces the same object instead of creating a new one.
  
  @param {Array|Object} obj
  @param {?Array<Object>=} [overrides] - additional objects to lookup for variable values
  @param {Boolean=} [mutate=false]
  @returns {Array|Object}