Estoy de acuerdo que aproveche la función implementada, pero igualmente sirve entender que se puede utilizar la otra forma, que dependiendo de la arquitectura es lo mismo.
Dado que en un 16F, realizar output_toggle(PIN_A2) lleva a que el compilador genere las mismas instrucciones que PORTA^=0x04; Ahora en un 18F no es lo mismo, ya que output_toggle(PIN_A2) utiliza la instrucción BTG de assembler, y en "C" lo correcto sería LATA=PORTA^0x04; que genera lo mismo que en un 16F 
En realidad mas allá de la función embebida que vaya uno a saber qué hace jaja, mi pregunta iba justamente a que no es lo mismo querer que la salida cambie a hacer un toggle de lo que leemos del puerto y luego cambiarlo...si lo que queremos es que lo que cambie sea la salida
Por ej suky, tu código puede ser erróneo en un 18F, ya que la salida del latch puede ser diferente a la entrada, lo mismo en pic16. Por eso le sugerí que use una variable auxiliar o "shadow registers" como le dicen los yankies a esta operatoria.
Ademas leer un solo "bit", internamente es igual a leer el puerto completo, por ello hay que tener cuidado cuando trabajamos con puertos de E/S.
Justamente el portA que para la mayoría de los pics tiene puerto analógico, leerlo digitalmente nos traerá todos ceros, entonces si queremos modificarlo de esa forma, solo lograremos que siempre esté el mismo valor en la salida
En los 18F, el toggle de una salida se debe realizar sobre la misma salida, sobre el registro LATCHx, no sobre PORTx.
Ni hablar si el toggle debe ser rápido, ahi entran en juego aspectos de la impedancia de lo que hay conectado por fuera del pin, etc. Por ello existen los LATx , para justamente evitar este enorme problema que tenian los 16F