The whole "buffer queue" thing is unnecessarily complicated. Don't worry at this stage about the propagation along wires — you can assume for now that the entire wire (node) changes state all at once. Gate delay is just a matter of a time delay before the output changes to match what the inputs say it should be.
We normally represent this as a timing diagram, something like this:
Node Time -->
______________________________________
A ______________/
:----->: delay of NOT gate
_____________________
NOT : \_______________________________
:------------>: delay of AND gate
:------------>: delay of AND gate
:______:
AND ____________________________/ \_________________
In a real circuit, the AND gate's output might or might not change in this scenario; it depends on its internal construction.
If the NOT gate delay is longer than the AND delay, then you probably will get a pulse:
______________________________________
A ______________/
:----------->: delay of NOT gate
___________________________
NOT : \_________________________
:------>: delay of AND gate
: :------>: delay of AND gate
:____________:
AND ______________________/ \________________
This is what is called a "race condition", and the output pulse is commonly called a "glitch" and is often an undesirable effect. The existence or width of the pulse depends only on gate delays and is therefore unreliable.
Real gates may have different propagation times for a low-to-high transition at the output versus a high-to-low transition. Furthermore, because of manufacturing variations, each of those delays will have a range of values rather than a single value. For example, for an inverter (NOT gate), you might have:
______ ________________
IN \_____________________/
t_PLH(max) :---->: t_PHL(max) :------->:
t_PLH(min) :->: : t_PHL(min) :--->: :
:___________________________:
OUT _________//// \\\\_______
where something like \$t_{PLH(max)}\$ means "propagation time, low-to-high, maximum". These are the numbers you'll see in a manufacturer's data sheet for a logic gate. As you add more gates, the uncertainty in the output timing keeps growing. When designing synchronous logic, the maximum delays will be used in the calculation of the setup time to a register, while the minimum delays1 will be used in calculating the hold time. As you might guess, this can quickly get complicated.
Anyway, I hope this gives you a more conventional way of thinking about timing at the gate level.
1 Minimum delays are sometimes called "contamination delay" these days, but we never used that term when I was learning this stuff.