I don't have a good answer for you, but it depends on the 16Mhz processor clock (obviously, the Arduino can't generate a pulse shorter than its clock).
Then, it depends on how long it takes the processor to "run" the particular operations that generate the pulse as well as whatever else you programming is doing before it get's around the loop.
If you set an output pin high and then set it low in the next program step, that's going to take some amount of time and you'll get a short pulse. (I don't know how wide the pulse will be.) If you delay 1uS between those two program steps, you pulse will be longer than 1uS because it takes some time for the processor to perform an operation. Different operations take different amounts of time (which you can look-up in the datasheet). (But remember, the processor isn't running C++, it's running machine language compiled from C++ and there can be many machine instructions to complete one C++ statement/expression.)
If you are "printing-out" the results every time through the loop, the serial communication is going to slow-up your loop a LOT. If you can "capture" the reading to a variable, and then print it when you are no longer generating/reading pulses, you can work with shorter pulses and you should get more consistent results.
There should be a way to generate (or measure) pulses in the "background" because various libraries such as PWM, stepper motor, and servo drivers seem to work that way, but I'm not expert enough to know you how that's done. (It might involve interrupts and/or assembly language.)