I've worked remotely for a little over 10 years. The approach I like is: start with IM (or sometimes email) and then move to voice if your real-time chat takes longer than a few minutes or a handful of back-and-forth volleys. At some point someone just sends: voice? (which is usually video/screen call). Depending on the problem worked on it means the person in the office (cubicle farm) may need to get up and grab a meeting room to avoid bugging their coworkers with the call. They might respond with a link to the video conference line/room, or with a better time in the future: 2pm?
That way you're not bugging people with a voice call for what turns out to be easily answered questions. But the culture allows for quick transition to voice and you don't get sucked into long IM conversations spinning your wheels due to miscommunication.
Not responding to IM until later with a 'sorry, was heads-down/afk/whatever' needs to be acceptable too, otherwise you get the problems of people expecting everyone's instant response all the time.
That said, I miss the old MSN messenger feature of 'buzzing' someone, which would animate/vibrate their IM window and play a soft buzz sound. I sometimes use the slack call feature for this (just ring and hang up), but that doesn't quite relay what I'm looking for - something less urgent than an immediate voice call, but lets the person know I'm likely blocked waiting for their answer. There's always that game that plays in your head - if I get an answer in < 1 minute, I'll stay on this task; if it takes longer, I'll spin up a different task I'm not blocked on...