I can't believe I've only just realised this (since it seems like I've read the HID spec a million times)...
For HID report descriptor items where the item value is zero (0), then usually I've seen a 1-byte length value specified, followed by a 0x00.
For example, LOGICAL_MINIMUM (0) is mostly coded as:
0x15, 0x00
Alternatively, you could code the same value (0) as either a 2- or 4-byte value as follows (but why would you?):
0x16, 0x00, 0x00
0x17, 0x00, 0x00, x00, 0x00
What I completely missed was that you can specify a 0-length value - for which the item value can only be 0 - as follows:
0x14
All of the above encodings means exactly the same thing: LOGICAL_MINIMUM (0)
Now we can all save a byte here and there!
Ok, it's not much, but when you're storing a report descriptor in a microcontroller every byte counts!