when i read this issue, i assumed it was simply a matter of the spellcheck response block not being included if there was no suggestions, but it's more subtle then that.
These queries don't produce any spellcheck section in the response at all...
But these queries do (even if that section contains no suggestions)....
Note in particular that last one - using "spellcheck.q=9999" causes the empty section to appear, even if it's identical to "q=9999"
Skimming the code, the problem seems to relate to the user of the "queryConverter", and the fact that it's only used on the "q" param (a different code path is used on the "spellcheck.q" param) and what happens if no tokens are produced – the "spellcheck" block is added to the response inside a conditional block that is only executed if there are tokens.
It seems like it would be fairly easy to just move the code that adds the block to the response outside of the conditional – but the fact that the two code paths produce different behavior makes me wonder if this isn't semi-intentional? is the idea that "your query converter produced no tokens, therefore we assume you don't want any spellcheck results?" should it be?
(FWIW: there is a similar condition where no "spellcheck" response is generated if there are no dictionaries configured)