The & is an indicator to most shells to run this command in "the background". Try and run ( sleep 10; echo hi ) & - you'll see you get your shell prompt back, where you can run more commands, but 10 second later you'll see that 'hi' come through. 'blocking' is the default behavior, if you don't add the & you're still going get the hi in ten seconds, but you don't get a prompt because your shell's execution is blocked until your command is done.
The doc here is indicating that you havea choice between autostart_blocking.sh and autostart.sh, the latter of which would be run with a &. They could have expressed this better.
As for why your script didn't work, I'd try executing it in a terminal to see what error message comes up.
But, whichever command I put in autostart.sh will run as if I run in terminal with the & sign. E.g: dunst & to run in the background.
Well, only if it's one single command, if you have multiple commands inside of the script, they will still run sequentially (the next command will only run after the previous one completely closes) unless you add & to them as well.
The difference is that dwm itself will not have to wait for the autostart.sh to complete before launching itself (thanks to it being run in the background with &)
However, autostart_blocking.sh (which isn't run with a &) will stop dwm from fully launching until the script completes.. I guess this is useful if you need certain things to be set up before dwm actually starts.. but it would potentially add a delay on dwm startup.
That's a pretty terrible article on the subject, but I don't have a better one at hand. You could read some shell scripting tutorial or manual or maybe a beginners guide to Unix. A decent one should explain job control well.
But basically, in a script or command line, an ampersand ends a command and runs it in the background without waiting for it to finish before running the next command. A semicolon works the same but waits on the foreground.
I will not reiterate what others have well explained Re: the use of &, though it's surprising to see someone able to use dwm before getting control of the basics of the command-line :)
Coming back to your issue, have you applied the patch and recompiled dwm? Also, you may want to take a look at the note on this patch's github (which was last updated 13 years ago).