versions/0.2.2/oj.js
function _setObject(obj){
    var args = arguments,
      o = obj,
      len = args.length,
      // keys are args ix: 1 to n-2
      keys = 3 <= len ? slice.call(args, 1, len = len - 1) : (len = 1, []),
      // value is last arg
      value = args[len++],
      ix, k

    for (ix = 0; ix < keys.length; ix++){
      k = keys[ix]

      // Initialize key to empty object if necessary
      if (typeof o[k] !== 'object')
        o[k] = {}

      // Set final value if this is the last key
      if (ix === keys.length - 1)
        o[k] = value
      else
        // Continue deeper
        o = o[k]
    }
    return obj
  }
function _setObject(obj){
    var args = arguments,
      o = obj,
      len = args.length,
      // keys are args ix: 1 to n-2
      keys = 3 <= len ? slice.call(args, 1, len = len - 1) : (len = 1, []),
      // value is last arg
      value = args[len++],
      ix, k

    for (ix = 0; ix < keys.length; ix++){
      k = keys[ix]

      // Initialize key to empty object if necessary
      if (typeof o[k] !== 'object')
        o[k] = {}

      // Set final value if this is the last key
      if (ix === keys.length - 1)
        o[k] = value
      else
        // Continue deeper
        o = o[k]
    }
    return obj
  }
_setObject(obj, k1, k2, ..., value): Set object deeply key by key ensure each part is an object