It is possible, but it is a little more complicated than that.
The reason this doesn't work:
Code:
draw_set_blend_mode_ext(bm_inv_src_color, bm_inv_dest_color)
is because it gives this as final pixel value: (min(Rs*(1-Rs) + Rd*(1-Rd), 1), min(Gs*(1-Gs) + Gd*(1-Gd), 1), min(Bs*(1-Bs) + Bd*(1-Bd), 1), min(As*(1-As) + Ad*(1-Ad), 1))
while you want ((1-Rs)*As + Rd*(1-As), (1-Gs)*As + Gd*(1-As), (1-Bs)*As + Bd*(1-As), ...).
This is not possible by drawing 1 thing through blend mode.
Now, there are 2 ways to tackle this:
1) Use shaders, shaders can do this very easilly.
2) Use blend modes a bit more extensively.
Set the blend mode to (bm_inv_dest_colour, bm_zero) and draw a white rectangle where you will draw your inverted sprite.
This will invert the colors of the place where you drew the white rectangle.
Now set the blend mode to bm_normal and draw the sprite you want to invert.
Now, set the blend mode to (bm_inv_dest_colour, bm_zero) again and draw the white rectangle again.
This will invert everything again, resulting in the background being inverted twice and the sprite you wanted to be drawn inverted, to be inverted once.