Ah. I take my words back.
I expected the primitive drawing operations to actually respect the pre-multiplied-alpha flag. Have you read the linked topic in your link?
Pre-multiplied color blending is enabled by default. This mode expects the colors to be "multiplied" by the alpha value of the pixel. (Which you are doing now.)
You can get a "normal" mode by doing al_set_new_bitmap_flags(ALLEGRO_NO_PREMULTIPLIED_ALPHA) before creating bitmaps, and setting the blending mode like this: al_set_blender(ALLEGRO_ADD, ALLEGRO_ALPHA, ALLEGRO_INVERSE_ALPHA).
(The main difference is the blending mode, which is al_set_blender(ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_INVERSE_ALPHA) when using "pre-multiplied-alpha", which is default.)
BTW I personally would set the blending mode to "replace", when creating/preparing semi-transparent bitmaps with al_set_blender(ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_ZERO). That's because (obviously >_>') I have no idea of how the primitives treat the alpha value exactly, unless using this blending mode.