A simple test app:
cout << new int[0] << endl;
outputs:
0x876c0b8
So it looks like it works.
Yes, it is legal to allocate a zero-sized array like this. But you must also delete it.