Storing metadata in a file name is universally recognized as a bad practice. It's also pretty much universally ignored.
When you're talking about "documents" and this kind of Finder-driven file name mangling, you're talking about user-created, stand-alone documents.
In this scenario, the Finder becomes your document database. And in most cases, that's fine.
But if you feel the need to take over file management from the Finder, then you have a lot more work to do. You will gain additional features and capabilities, but you have to do it carefully. And some ideas, like storing the file name inside the document, simply aren't viable in any context.
And easy way to solve this is to stop calling it "document name" and call it a "document description". Seems like a minor, pedantic point, but it's important. When you give something a label, that something tends to start adopting all known aspects of said label, whether they're appropriate or not.
You can certainly use the document description as a template for a document name suggestion in the file dialog. Since this is no long a "name" in any sense, you're free to mangle it in any way convenient. You should pre-process it to remove any characters that would reasonably cause confusion, i.e. any special or punctuation characters.
It's tempting to allow some common ones, but that's where you need to think about who's maintaining your document database. If you're taking on that responsibility, you'll need to think about how you would handle any file name with special characters or punctuation. Just go through the ones you can see on the keyboard and think of how many times each has caused you grief in the past.
So if you strip them all out, you give the NSSavePanel API guaranteed valid input. The user can change it and make it invalid, and the OS can change it to make it unique. But that's all outside of your concern and responsibility. And that's a great place for it.
If and when you get back a URL, you'll know it's valid, for at least the duration of your file coordination block.