1D Shikaku Validation
JavaScript (ES6),  56  52 bytes
Returns a Boolean value.

a=&gt;![...a,1].some(x=&gt;t&gt;0/x?1:(t+=x-1)*x&lt;0?t=0:0,t=0)

Try it online!
Commented
The accumulator \$t\$ is decremented whenever an empty slot is encountered. For each non-zero value \$x\$, we update \$t\$ to \$max(t+x-1,0)\$. The test fails if we reach a non-empty slot (or the end of the list) with \$t&gt;0\$.
a =&gt;               // a[] = input
  ![...a, 1]       // append a '1' at the end of a[] to force a last test
  .some(x =&gt;       // for each value x in the updated array:
    t &gt; 0 / x ?    //   if x = 0, this test is always falsy (0 / 0 -&gt; NaN)
                   //   if x ≠ 0 and t is greater than 0:
      1            //     failed: yield 1
    :              //   else:
      (t += x - 1) //     add x - 1 to t
      * x &lt; 0 ?    //     if t is negative and x ≠ 0:
        t = 0      //       we have accumulated more empty slots than
                   //       we can consume here: set t to 0
      :            //     else:
        0,         //       do nothing
    t = 0          //   start with t = 0
  )                // end of some(); return the opposite result