Yeah, I get it.... but the consumers of this stuff are mainly just our tests, right?  And the tests should maybe be able to know when they are going to have a String vs. an X500Name?

I guess I'm just saying that your "X" feels like a fairly reasonable use of a multimethod (though I am just generally not a huge fan of multimethods), but your "Y" just feels like you are introducing a matrix that makes the flow control harder to understand, when the callers could theoretically just do the "toString" themselves and thus reduce the complexity of our function.

Anyway, it's just an opinion.  Let's wait and see what other people think.  Maybe I'm just being nitpicky and everyone else will weigh in in favor of the current approach.