code: function (path, value) {
      if (typeof path == 'string') {
        path = path.split('.');
      } else if (!Array.isArray(path)) {
        return;
      }
  
      var propName = path.shift();
      var prop = Model.allProperties[propName] || opts.extra[propName];
      var currKey, currObj;
  
      if (!prop) {
        return;
      }
      if (path.length == 0) {
        instance[propName] = value;
        return;
      }
      currObj = instance[propName];
  
      while(currObj && path.length > 0 ) {
        currKey = path.shift();
  
        if (path.length > 0) {
          currObj = currObj[currKey];
        } else if (currObj[currKey] !== value) {
          currObj[currKey] = value;
          opts.changes.push(propName);
        }
      }
    }
docs: ('data.a.b', 5) => opts.data.a.b = 5