When you look at processTickPriceMsg() deep in the API in EDecoder.java it seems that price and size actually arrive in the same message. Once decoded, tickPrice() is called right before tickSize() for ASK, BID, LAST, and the DELAYED versions. You might also get more tickSize() callbacks without additional tickPrice() calls.
So it appears the detection is quite simple. When tickPrice() indicates a price of -1 just wait for the next tickSize() to confirm.
JR.