code: function(node, callback) {
    common.patchNode(node);
    if (!node.__dom.observer) {
      node.__dom.observer = new AsyncObserver();
    }
    node.__dom.observer.callbacks.add(callback);
    var observer = node.__dom.observer;
    return {
      _callback: callback,
      _observer: observer,
      _node: node,
      takeRecords: function takeRecords() {
        return observer.takeRecords()
      }
    };
  }
docs: TODO(sorvell): consider instead polyfilling MutationObserver directly so that users do not have to fork their code. Supporting the entire api may be challenging: e.g. filtering out removed nodes in the wrong scope and seeing non-distributing subtree child mutations.