As a matter of fact I it would be a lot more clear if you also split method to event name mappings and argument mappings.

```js
const HISTORY_EVENTS = {
  onBeginUpdateBatch: 'history-start-batch',
  onEndUpdateBatch: 'history-end-batch',
  onClearHistory: 'history-start-clear',
  onDeleteURI: 'history-delete-url',
  onDeleteVisits: 'history-delete-visits',
  onPageChanged: 'history-page-changed',
  onTitleChanged: 'history-title-changed',
  onVisit: 'history-visit'
};

const HISTORY_ARGS = {
  onBeginUpdateBatch: [],
  onEndUpdateBatch: [],
  onClearHistory: [],
  onDeleteURI: [['url' getURL]],
  onDeleteVisits: [['url', getURL]], ['visitTime', identity]],
  onPageChanged: [['url', getURL], ['property', identity], ['value', identity]],
  onTitleChanged: [['url', getURL], ['title', identity]],
  onVisit: [['url', getURL],['visitId', identity], ['time', identity], ['sessionId', identity],
                ['referringId', identity], ['transitionType', identity]]
}

// same for bookmarks ...

makeObserver(HISTORY_EVENTS, HISTORY_ARGS)
```