You are correct - both the documentation you link to and the specification appear to be out of sync with the actual data returned. (And have been for a very long time… This is not the only place in the API where this is the case either.)
As you note this is (always?) returned as: legal-person-person-with-significant-control
… which while it looks odd makes sense given that all the other similar constants are (something)-person-with-significant-control - here the “something” is just “legal-person”.
More here:
Also note that the constants are not the same between APIs either e.g. apparently the Streaming API has a different set of constants (at least for PSCs).
We have found that - like all large APIs - it is a very good idea to parse results with a flexible parser:
a) Trying to assume as little as possible and handle as wide a range of “discovered data” as is logical for our application e.g. allowing that values may appear which we have no knowledge of and handling those as sensibly as possible. Also trying not to rely on particular fields (if it’s not vital to our use-case, don’t fail if it doesn’t appear at all!)
b) Logging unexpected data to feed back in to the process of “here’s what we know we may get”.
See this old thread for some examples you can check if you need (I have no idea if the speculations therein are true though).
Good luck.