docs: function val(object, key, value) {
    var keys = key.split("."); // Split key by .
    for (var i in keys) {
      // Rejoin key sections that end in \ (i.e. made up \. before splitting)
      if (keys[i].match(/\\$/) && i < (keys.length - 1)) {
        var ii = parseInt(i) + 1;
        keys[ii] = keys[i] + "." + keys[ii];
        continue;
      }
      keys[i] = unescape(keys[i], ".");
  
      // Write Value
      if (typeof value != "undefined") {
  
        // This is the last element in the array, if we are setting value then do it here
        if (i == (keys.length-1)) {
          object[keys[i]] = value;
          // Property exists and is an Object - go to it
        } else if (keys[i] in object && typeof object[keys[i]] == "object") {
          object = object[keys[i]];
          // Property doesn't exist - create a new object
        } else {
          object = object[keys[i]] = {};
  
        }
  
        // Read Value
      } else {
  
        // If the key exists, and the property is defined, go down a level
        if (typeof object == "object" && keys[i] in object) {
          object = object[keys[i]];
        } else {
          return undefined;
        }
  
      }
    }
    return object;
  }