Easily done. The one trick it to make a copy of your volatile variable so it can't get updated/corrupted in you loop()
volatile unsigned long pulseWidth;
void setup() {
...
}
void loop() {
unsigned long pulseWidthCopy;
cli(); // no interrupts
pulseWidthCopy = pulseWidth;
sei();
... // use pulseWidthCopy
}
void ISR() {
static unsigned long lastTime;
unsigned long currentTime = millis();
pulseWidth = currentTime - lastTime;
lastTime = currentTime;
}