docs: function observer() {
      for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
        args[_key4] = arguments[_key4];
      }
  
      var func = args.slice(-1)[0];
      var paths;
  
      var addWatchedProperty = function (path) {
        paths.push(path);
      };
      var _paths = args.slice(0, -1);
  
      if (typeof func !== 'function') {
        // revert to old, soft-deprecated argument ordering
        _emberMetalDebug.deprecate('Passing the dependentKeys after the callback function in Ember.observer is deprecated. Ensure the callback function is the last argument.', false, { id: 'ember-metal.observer-argument-order', until: '3.0.0' });
  
        func = args[0];
        _paths = args.slice(1);
      }
  
      paths = [];
  
      for (var i = 0; i < _paths.length; ++i) {
        _emberMetalExpand_properties.default(_paths[i], addWatchedProperty);
      }
  
      if (typeof func !== 'function') {
        throw new _emberMetalError.default('Ember.observer called without a function');
      }
  
      func.__ember_observes__ = paths;
      return func;
    }