code: function registerRestorableStyles(backup, node, properties) {
    forEach(properties, function(prop) {
      backup[prop] = isDefined(backup[prop])
          ? backup[prop]
          : node.style.getPropertyValue(prop);
    });
  }
docs: we do not reassign an already present style value since if we detect the style property value again we may be detecting styles that were added via the `from` styles. We make use of `isDefined` here since an empty string or null value (which is what getPropertyValue will return for a non-existing style) will still be marked as a valid value for the style (a falsy value implies that the style is to be removed at the end of the animation). If we had a simple "OR" statement then it would not be enough to catch that.