We are trying to adopt custom elements for some parts of your UI and ran into the issue that during an update to the tree, custom attributes on the the custom elements are not removed correctly as can be seen here: http://jsbin.com/ferohipaje/edit?html,output (you will need to click on "false" and then inspect the DOM node in the dev tools of the browser).

I've tracked the issue to the `_updateDOMProperties` method in `ReactDOMComponent.js`. It seems that there is a special check in the loop for `nextProps`:

``` js
else if (isCustomComponent(this._tag, nextProps)) {
  if (!RESERVED_PROPS.hasOwnProperty(propKey)) {
    DOMPropertyOperations.setValueForAttribute(getNode(this), propKey, nextProp);
  }
}
```

But the corresponding section is missing for `lastProps` (deleting), which results in the incorrect behavior.

I'm starting the work on the patch.

'Warning: Invalid attribute name: `blah" onclick="beevil" noise="hi`'
      );
    });
    it('should update arbitrary attributes for tags containing dashes', function() {
      var container = document.createElement('div');
      var beforeUpdate = React.createElement('x-foo-component', {}, null);
      ReactDOM.render(beforeUpdate, container);
      var afterUpdate = <x-foo-component myattr="myval" />;
      ReactDOM.render(afterUpdate, container);
      expect(container.childNodes[0].getAttribute('myattr')).toBe('myval');
    });
    it('should clear all the styles when removing `style`', function() {
      var styles = {display: 'none', color: 'red'};
      var container = document.createElement('div');
      ReactDOM.render(<div style={styles} />, container);
      var stubStyle = container.firstChild.style;
      ReactDOM.render(<div />, container);
      expect(stubStyle.display).toEqual('');
      expect(stubStyle.color).toEqual('');
    });
    it('should update styles when `style` changes from null to object', function() {
      var container = document.createElement('div');
      var styles = {color: 'red'};
      ReactDOM.render(<div style={styles} />, container);
      ReactDOM.render(<div />, container);
      ReactDOM.render(<div style={styles} />, container);
      var stubStyle = container.firstChild.style;
      expect(stubStyle.color).toEqual('red');
    });
    it('should empty element when removing innerHTML', function() {