This behavior has actually changed over time in Marketo. But the way it works now is the way I'd expect it to work -- why shouldn't an empty string in the response result in setting the field to, well, an empty string? (Marketo calls it [null] but it's not a real ANSI NULL here, it's the same thing you get if you change the field to blank in the UI.) If it didn't do this, then you wouldn't be able to blank a field from a webhook.
The 3rd party isn't doing being semantically accurate IMO. If they don't have a value, they shouldn't include the property in the response at all. Otherwise there's no choice but to treat "" as a value.