Backbone/Marionette form with list of inputs
Answering my own question. A View's Model represents "state", not data. This is a subtle distinction that wasn't apparent to me at first. The Collection should match the View, blank values and all.

When it comes time to save the list, the Collection's toJSON method can be overridden to omit any blank models.

I updated my original jsfiddle to show values being saved on blur.

var Person = Backbone.Model.extend();

var People = Backbone.Collection.extend({
  model: Person,
  toJSON: function() { /*filter out empty models*/}
});

var PersonView = Marionette.ItemView.extend({
  ...
  events: {
    'blur input': 'onChange', //calls model.set('name', input value)
  },
  triggers: {
    'click .del-name': 'remove:form:row' //calls collection.remove(...)
  },
  ...
});

var FormView = Marionette.CompositeView.extend({
  events: {
    'click @ui.addBtn': 'addFormRow' //calls collection.add({name: ''})
  },
  collectionEvents: {
    add: 'onRowAdded'  //rerender first row to show delete button
  },
  ...
});