Absolutely correct Dave,uart.any returns if any characters are available. If it executes immediately after the write, its possible that your response may not have arrived yet.
By placing a delay(10), uart.any is now executing after the complete response packet is received and solves the initial problem.
My understanding of uart.any was that it would also initiate the start to listen Rx buffer, but it actually needs data in Rx buffer before it tests for uart.any.
Loop and delay may cause problems or at least poor efficiency as I will be building this in a "State Machine" application where I don't want unnecessary blocking or wasting time in a loop, that's why I have asked if there is a way or setting up a UART read in interrupt routine something similar to callback()?If you want to read ulen bytes, then you'll need a loop.