code: function deepRef(start, keys, value, line, column) {
      var traversed = [];
      var traversedPath = "";
      var path = keys.join(".");
      var ctx = start;
  
      for (var i = 0; i < keys.length; i++) {
        var key = keys[i];
        traversed.push(key);
        traversedPath = traversed.join(".");
        if (typeof ctx[key] === "undefined") {
          if (i === keys.length - 1) {
            ctx[key] = value;
          } else {
            ctx[key] = Object.create(null);
          }
        } else if (i !== keys.length - 1 && valueAssignments.indexOf(traversedPath) > -1) {
          // already a non-object value at key, can't be used as part of a new path
          genError("Cannot redefine existing key '" + traversedPath + "'.", line, column);
        }
  
        ctx = ctx[key];
        if (ctx instanceof Array && ctx.length && i < keys.length - 1) {
          ctx = ctx[ctx.length - 1];
        }
      }
  
      return ctx;
    }
docs: Given a path 'a.b.c', create (as necessary) `start.a`, `start.a.b`, and `start.a.b.c`, assigning `value` to `start.a.b.c`. If `a` or `b` are arrays and have items in them, the last item in the array is used as the context for the next sub-path.