After thinking more about this, I can't find a possible use for
read-string-defaults-function, because every call of read-string
provides own default value. Also using read-regexp-defaults-function
in query-replace-read-from is not the right thing either - when
the users already customized it for e.g. occur, it would be too
unexpected when it will use a tag at point instead of from->to
pairs in query-replace.
Since query-replace is a very special command, the most uncontroversial
thing to do for a conservative approach would be to add two specific
variables (that later could be turned into options when needed):