How is this circuit for interfacing 20V signal with 3v3 microcontroller
Looks good to me. The inverse diode D1 is a good idea. If you have a minimum of 12V available you may wish to reduce R2 somewhat. This circuit has a threshold of maybe 2V, you could easily halve R2 or double R1. 

In the case of momentary extreme over-voltage, the base-emitter voltage (forward biased) will not rise above a volt or so, even with 100mA. It looks like another diode in inverse parallel to D1. One of the advantages of a BJT in this application. The limitation is more likely to be the voltage rating of R1. 

If you want to consider sustained overvoltage, you may have to consider the power rating of R1. If some idiot connects it to the mains (we can usually assume that about 240VAC is the most voltage idiots will have access too- idiots with access to higher voltages are sort of a self-eliminating problem) then R1 would dissipate almost 6W, so it would have to be a physically large part. You could solve that issue by increasing the value of R1 so that a smaller part could be used.