I heard your blocked phone number gets unblocked on the receiving side if you call a 800 number.
Of course now days spoofing a caller ID is really easy.
There's a difference between billing data and the number delivered by ANI/Caller ID. If you call someone and expect them to pay the bill, your number must be provided to them, yes.
Otherwise the carrier could just say all calls you received came from the highest priced L/D areas.
So you're correct, your "blocked" number is absolutely provided to the receiving party if you dial a toll-free number. They're paying the bill, they have a right to know who called them and from where.
It will still show up as blocked on ANI/Caller ID, if done properly, but it will absolutely be in the billing data.
It's easy to put the calls into a database and correlate them if your clocks are all properly synchronized. Typically the carrier won't tell you which actual trunk the call was delivered to, so you still have to do some work when the timestamp is only down to the second on the bill, to disambiguate between two ANI-blocked calls in the same second, to the same toll-free number.
Most companies don't bother, other than to check for carrier billing fraud, which is rare.
The carrier is not supposed to provide a blocked number via ANI in real time, but it was commonly done by some, back when their systems wouldn't properly strip it, especially if you were trunked directly into a switch normally dedicated for L/D and not Local service.
Those switches weren't designed to honor the blocked bit, since they were core routing infrastructure and not intended to deliver calls directly to a customer premise device. (These were once called "tandem" switches. There's not much of a distinction anymore now that you can get trunks directly from an L/D carrier.
If you were trunked directly into a tandem, you got data you weren't supposed to get.
As far as ANI spoofing, there's a good reason for it. If you have a PBX that has a hundred phone numbers that can reach it, you want the ability to set ANI on outgoing calls properly so customers will call back to the correct number.
Many carriers nowadays will filter out and drop any ANI you send that doesn't match a number they provided, but if you have multiple carriers, you might be sending an ANI that routes to a trunk from another carrier if you're using an overflow trunk to your secondary or tertiary carrier. Or even just doing your own least-cost routing. So if they're filtering, you can ask them to stop and they will.
And the "new" carriers that never participated in the Bell system nor understand the engineering design, simply don't care. I can send whatever ANI I feel like sending from our PBX out my Comcast trunks, for example. I was just playing with it the other night attempting to fix a problem where our extension numbers are being added to our 800 number on outbound calls.
I set my desk phone to send 800-555-1212 and called my cell phone and got 8005551212XXX where XXX is my internal extension number. I'm still hunting for the damn checkbox that someone turned on that's triggering that.
We're replacing the whole system in a month so I have to decide what priority to put on fixing it on gear that will be gone soon.