¿Llamar al sustituto * antes * del objeto a JSON?

¿Hay alguna manera de llamar a mi sustituto?antes de el propio objetotoJSON lo transforma, para que pueda trabajar con el objeto original en lugar de su forma compatible con JSON,sin anulando eltoJSON en el objeto o su prototipo, preprocesando el objeto o escribiendo mi propia versión deJSON.stringify?

Por ejemplo: supongamos que quiero serializarDate instancias diferentes a su serialización normal (cual estoISOString) (Esta pregunta esno específico aDate, esto es solo un ejemplo.) El problema es que mi sustituto no ve elDate objeto, ve una cadena (ver fragmento a continuación) porqueDate.prototype.toJSON se llamaantes de mi sustituto

var obj = {
  d: new Date()
};
snippet.log(getType(obj.d));     // "[object Date]"

var json = JSON.stringify(obj, function(key, value) {
  if (key === "d") {
    snippet.log(getType(value)); // "string" <== Want to see a Date here
  }
  return value;
});

function getType(value) {
  var to = typeof value;
  if (to === "object") {
    to = Object.prototype.toString.call(value);
  }
  return to;
}
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

¿Hay alguna manera de llamar primero al sustituto? No quiero anularDate.prototype.toJSON, preprocesar el objeto o escribir el míoJSON.stringify, pero no estoy viendo otra manera.

Respuestas a la pregunta(2)

Su respuesta a la pregunta