Edit in JSFiddle

var assert = function (exp, msg) {
  var el = console.log.el || (console.log.el = $('#console'));
  el.append(_.template('<div<%=cls%>><%-msg%></div>')({
    cls: exp ? '' : ' class="fail"',
    msg: msg
  }));
};


var Person = Backbone.Model.extend({
  defaults: {
    name: 'John Doe',
    age: 25
  }
});

var Person2 = Backbone.Model.extend({
  defaults: function () {
    return {
      name: 'John Doe',
      age: 20 + Math.floor(Math.random() * 30)
    };
  }
});

var SuperMan = Person.extend({
  defaults: {
    power: 530000
  }
});

var SuperMan2 = Person.extend({
  defaults: function () {
    return _.defaults({
      power: 530000
    }, _.result(Person.prototype, 'defaults'));
  },
  say: function () {}
});

var person = new Person({ age: 100 });
assert('John Doe' === person.get('name'), 'name はデフォルト値がセットされている');
assert(100 === person.get('age'), 'age はインスタンス化時の値がセットされている');

assert(true, '-----');

var person2 = new Person2({ name: 'Jane Doe' });
assert('Jane Doe' === person2.get('name'), 'name はインスタンス化時の値がセットされている');
assert(20 <= person2.get('age') && person2.get('age') < 50, '年齢はデフォルト関数から正常にセットされている');

assert(true, '-----');

var superMan = new SuperMan();
assert('John Doe' === superMan.get('name'), 'name は Person から継承した値がセットされている');
assert(530000 === superMan.get('power'), 'power は正常にセットされている');

assert(true, '-----');

var superMan2 = new SuperMan2();
assert('John Doe' === superMan2.get('name'), 'name は Person から継承した値がセットされている');
assert(530000 === superMan2.get('power'), 'power は正常にセットされている');
<div id="console"></div>
#console {
    padding:.5em;
    border:1px solid #ccc;
    overflow:auto;
    height:200px;
    .fail {
        color: red;
        text-decoration: line-through;
    }
}

External resources loaded into this fiddle: