I have an access point with hidden ESSID, but it shows ESSID=' ' (that's a single-space  not a empty one). The module (version 0.3.35) only tries to join a hidden ESSID when it's empty, but with a little modification works correctly. In file common.c line 5388 where it says:

if (bss->essid[0] == '\0') {

should say :

if (bss->essid[0] == '\0' || (bss->essid[0] = ' ' && bss->essid[1] == '\0')) {

Well, my C skills are very rusty and it may be written more elegantly but this works.