Even with the avr-gcc that gets downloaded with the source (version 4.3.2), this still compiles on my computer:
void setup() {}
void loop() {}
ISR(ADC_vect) {PIND = 0x00;}
ISR(ANALOG_COMP_vect) {PIND = 0x01;}
ISR(EE_READY_vect) {PIND = 0x02;}
ISR(INT0_vect) {PIND = 0x03;}
ISR(INT1_vect) {PIND = 0x04;}
ISR(PCINT0_vect) {PIND = 0x05;}
ISR(PCINT1_vect) {PIND = 0x06;}
ISR(PCINT2_vect) {PIND = 0x07;}
ISR(SPI_STC_vect) {PIND = 0x08;}
ISR(SPM_READY_vect) {PIND = 0x09;}
ISR(TIMER0_COMPB_vect) {PIND = 0x0a;}
//ISR(TIMER0_OVF_vect) {PIND = 0x0b;}
ISR(TIMER1_CAPT_vect) {PIND = 0x0c;}
ISR(TIMER1_COMPA_vect) {PIND = 0x0d;}
ISR(TIMER1_COMPB_vect) {PIND = 0x0e;}
ISR(TIMER1_OVF_vect) {PIND = 0x0f;}
ISR(TIMER2_OVF_vect) {PIND = 0x10;}
ISR(TWI_vect) {PIND = 0x11;}
//ISR(USART_RX_vect) {PIND = 0x12;}
ISR(USART_TX_vect) {PIND = 0x13;}
//ISR(USART_UDRE_vect) {PIND = 0x14;}
ISR(WDT_vect) {PIND = 0x15;}
The two USART ones didn't work with 4.3.2 but they did with 4.7.1, and the TIMER0_OVF one didn't work on either of them.
It would definitely make sense to make the functions weak. I tried it and it made the above sketch compile with everything uncommented. I think it should be a goal of arduino to be able to use any program that don't use arduino libraries in the IDE, and that means being able to redefine the ISRs.