So, I've taken this as a challenge and came up with
this. =P
I believe the reason that $chan(#).idle doesn't work in the on TEXT/ACTION events is that it is reset whenever there is a message or action in the channel; the ^ catches the event before the text is printed to your mIRC, but not before the text is actually sent/recieved, which, ultimately, is probably why it makes no difference with this identifier.
I do agree that it would be nice to see this functionality built in...