I think this looks pretty good! So the norms "cache" and byte-ness gets moved from TFIDF into DefaultXXX, but otherwise the API is pretty much the same.
The only concern i have is now DefaultSimilarity has non-final methods with "long" signatures... which could lead to some traps. But maybe this is OK: if someone were to inadvertently override encodeNormValue without changing decodeNormValue, they are doing the wrong thing anyway right?
Maybe we can try to improve this with javadocs...
Or alternatively, maybe we should make these final in DefaultSimilarity, and if you want to change norm encoding (not calculation, which can still be easily tuned), really you should extend TFIDFSimilarity since its a pretty big change. I would prefer this.