Divide and conquer
The first thing I would check is an intermittent connection to or an out of range ECT sensor. An enhance OBDII scanner can read the sensor, if it reports a low temp then the PCM selects rich/high idle/open loop. You can remove the connector and place a 100 ohm resister across the connector terminals, if the idle returns to normal replace the sensor.
If you suspect a sticky IAC, remove the feed hose and plug the IAC inlet. If the engine stalls or low idles the IAC is letting air in. Next reconnect the hose and with the engine running pull off the electrical connector to the IAC. If the engine returns to normal idle or stalls the IAC is being controlled by the PCM to high idle. If the High idle continues with the connector off but doesnâ??t with the air line plugged then the IAC is mechanically stuck open.
If the engine continues to race with the IAC air line plugged then air is getting past via the TP or intake man leak.
jeff