I want to use the USART_RX_vect interrupt, but it is used in wiring_serial.c. It seems silly to hobble the hardware like this.
Moving the interrupt definition to a header file would allow for a lot more flexibility.
// define USART_RX_vect interrupt
Putting "#define SERIAL_ISR" at the top of a PDE file would stop the Arduino library from grabbing the interrupt.
Moving the interrupt definition to the header would mean some variables contained in wiring_serial would need to be made global... specifically rx_buffer, rx_buffer_head, and rx_buffer_tail. These could all be put into a single struct to not pollute the namespace too much.
The other option I see is to make the interrupt call another function via a function pointer, and allow that function pointer to be redefined(it would default to the normal serial receive routine). Using a function pointer might cause some performance problems...